#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define D long double
#define N 2000006
int head[N],nxt[N],ver[N],tot=1,edg[N];
void add(int x,int y,int z){
	ver[++tot]=y;edg[tot]=z;
	nxt[tot]=head[x];head[x]=tot;
}
int cur[N],d[N],s=0,t;
int bfs(){
	for(int i=s;i<=t;i++)	d[i]=-1,cur[i]=head[i];
	queue<int> q;q.push(s);d[s]=0;
	while(q.size()){
		int x=q.front();q.pop();
		for(int i=head[x];i;i=nxt[i]){
			int y=ver[i],z=edg[i];
			if((!z)||(d[y]>=0))	continue;
			d[y]=d[x]+1;q.push(y);
			if(y==t)	return 1;
		}
	}
	return 0;
}
int dfs(int x,int now){
	if(x==t)	return now;
	int val=now;
	for(int i=cur[x];i&&val;i=nxt[i]){
		int y=ver[i],z=edg[i];cur[x]=nxt[i];
		if((d[y]==(d[x]+1))&&z){
			int v=dfs(y,min(z,val));
			if(!v)	d[y]=-1;
			val-=v;edg[i]-=v;edg[i^1]+=v;
		}
	}
	return now-val;
}
inline int dinic(){
	int now=0,sum=0;
	while(bfs()){
		while((now=dfs(s,1e9)))	sum+=now;
	}
	return sum;
}
signed main(){
	freopen("pairint.in","r",stdin);
	freopen("pairint.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n;cin>>n;t=3*n+1;
	for(int i=1;i<=n;i++){
		int x,y;cin>>x>>y;
		add(s,i,1);add(i,s,0);
		add(i,x+n,1);add(x+n,i,0);
		if(x!=y){
			add(i,y+n,1);add(y+n,i,0);
		}
	}
	for(int i=1;i<=2*n;i++){
		add(i+n,t,1);add(t,i+n,0);
	}
	cout<<dinic();
	return 0;
}
